Qt5.7文档翻译:QUdpSocket类,QUdpSocket Class
QUdpSocket 类,提供了 UDP套接字功能 。 详细说明……
头文件: |
#include <QUdpSocket> |
qmake指令: |
QT += network |
继承: |
注意 : 这个类中的所有函数都是 可重入的 。
QUdpSocket 类,提供了 UDP套接字功能 。
用户数据 报协议( UDP (User Datagram Protocol) ),是一个轻量级的、不可靠的、面向数据包的、无连接的协议。 在可靠性不那么重要时,可使用这种协议。 QUdpSocket 是 QAbstractSocket 的子类, 妳可使用它来发送及接收 UDP数据包 。
这个类,最常见的用法是,使用 bind () 来绑定到某个地址和端口,然后调用 writeDatagram () 和 readDatagram ()来传输数据。如果 妳想使用标准的 QIODevice 函数,例如 read ()、 readLine ()、 write (),那么, 妳就需要先调用 connectToHost ()来直接将套接字连接到某个主机。
每当 有数据包被写入到网络中去时,这个套接字就会发射 bytesWritten ()信号。如果 妳只是要发送数据包,那么,就不需要调用 bind ()。
每当 有数据包到达时,就会发射 readyRead ()信号。 在那种情况下, hasPendingDatagrams ()就会返回真( true )。调用 pendingDatagramSize () 可获取到缓冲区中第一个数据包的尺寸,调用 readDatagram ()即可读取它。
注意 : 当妳收到 readyRead ()信号时,应当读取对方发送过来的数据包,否则,下个数据包到来时不会再次发射 该 信号。
示例:
void Server::initSocket()
{
udpSocket = new QUdpSocket (this);
udpSocket->bind( QHostAddress ::LocalHost, 7755);
connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(readPendingDatagrams()));
}
void Server::readPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
processTheDatagram(datagram);
}
}
QUdpSocket 还支持 UDP 组播。使用 joinMulticastGroup () 和 leaveMulticastGroup ()即可控制组员关系 ,使用 QAbstractSocket::MulticastTtlOption 和 QAbstractSocket::MulticastLoopbackOption 来设置生存时间(TTL)和 回 环(loopback)套接字选项。使用 setMulticastInterface () 来控制要用来向外发送组播数据包的网卡,使用 multicastInterface ()来查询这个属性。
使用 QUdpSocket , 还可以调用 connectToHost ()来建立与某个UDP 服务器的虚拟连接,然后 ,就可以调用 read ()和 write ()来交换数据,而无需再指定每个数据包的接收者了。
广播 发送者 、 广播接收 者 、 组播发送者 和 组播接收者 示例展示 了如何在应用程序中使用 QUdpSocket 。
参考 QTcpSocket 。
在由操作系统选择的默认网卡上加入到由地址 groupAddress 指定的组播组。 套接字必须处于 BoundState 状态,否则会出现错误。
注意 ,如果妳是要加入到某个 IPv4 组播组,那么 ,妳的套接字就不能使用IPv6 绑定 ( 也不能使用 QHostAddress::Any 来以双模式绑定 ) 。妳必须使用 QHostAddress::AnyIPv4 。
如果操作成功, 此函数会返回真( true );否则会返回假( false ),并且设置对应的套接字错误。
此函数是从Qt 4.8 开始引入的。
参考 leaveMulticastGroup () 。
这是一个重载函数。
在网卡 iface 上加入由地址 groupAddress 指定的组播组。
此函数是从Qt 4.8 开始引入的。
参考 leaveMulticastGroup () 。
在由操作系统选择的默认网卡上,退出由地址 groupAddress 指定的组播组。 套接字必须处于 BoundState 状态,否则会出现错误。
如果操作成功, 此函数会返回真( true );否则会返回假( false ),并且设置对应的套接字错误。
此函数是从Qt 4.8 开始引入的。
参考 joinMulticastGroup () 。
bool
QUdpSocket::
leaveMulticastGroup
(const
QHostAddress
&
groupAddress
, const
QNetworkInterface
&
iface
)
这是一个重载函数。
在网卡 iface 上退出由地址 groupAddress 指定的组播组。
此函数是从Qt 4.8 开始引入的。
参考 joinMulticastGroup () 。
返回用来 向外发送组播数据包的网卡。 这个,对应于IPv4 套接字的IP_MULTICAST_IF 套接字属性,以及IPv6 套接字的IPV6_MULTICAST_IF 套接字属性。如果之前 未设置网卡,则,此函数返回一个无效的 QNetworkInterface 。 套接字必须处于 BoundState 状态,否则会返回无效的 QNetworkInterface 。
此函数是从Qt 4.8 开始引入的。
参考 setMulticastInterface () 。
将用来向外发送组播数据包的网卡设置为 iface 。 这个,对应于IPv4 套接字的IP_MULTICAST_IF 套接字选项,和IPv6 套接字的IPV6_MULTICAST_IF 套接字选项。 这个套接字必须处于 BoundState 状态,否则,此函数什么也不做。
此函数是从Qt 4.8 开始引入的。
参考 multicastInterface () 、 joinMulticastGroup () 和 leaveMulticastGroup () 。
将data所指向的大小为size的数据报发送到地址为address的主机的port端口。如果成功,则返回已发送的字节数;否则返回-1。
数据报永远会作为一整块发送出去。一個数据报的最大长度是与平台有关的,但是有可能小到8192 字节。如果数据报太长,那么这个函数会返回-1,并且 error ()会返回 DatagramTooLargeError 。
通常不建议发送长度超过512 字节的数据报,∵,即使它们发送成功咯,也有可能在这個过程中被IP 层分片咯。
警告: 在一個已连接的UDP 套接字上调用这個函数可能会导致出错,因而导致数据包发送不成功。如果妳使用的是已连接的套接字,则应当使用 write ()来发送数据报。
参考 readDatagram () 和 write () 。
这是個重载函数。
将数据报datagram发送到地址为host的主机的port端口。
未知美人
2016-09-02
G20曾塌w旧自勤 「翻雅J 可澍寞彼禁境外炯站
2016-09-0219 39
@蜃嬴〕厂
71%
Your opinionsHxLauncher: Launch Android applications by voice commands